package org.example.Utils;


/**
 * 控制台颜色输出
 */
public class ConsoleColorOutput {
    /**
     * 控制台输出空格数量
     */
    public static int SPACE_LINE = 80;
    public static int LENGTH_ERROR = 4;

    /**
     * 控制台颜色输出
     */
    private ConsoleColorOutput() {
    }

    /**
     * 顶部输出
     * 效果：
     * ___________________________________| 开启新的轮回 |___________________________________
     */
    public static void topLineOutput(ConsoleStyle consoleStyle, String str) {
        System.out.println("\n");
        // 计算空格数量
        int length = (str.length() + 4);

        int space = (SPACE_LINE - length) / 2;

        for (int i = 0; i < space; i++) {
            System.out.print("_");
        }

        System.out.print(consoleStyle.getCode().getConsoleTextStyle() + "| " + str + " |" + ConsoleTextStyle.getReset());

        for (int i = 0; i < space; i++) {
            System.out.print("_");
        }
        System.out.println("\n");
    }

    /**
     * 输出分割线 并换行
     * 效果：
     * ____________________________________________________________________________________
     *
     */
    public static void outputDividingLine() {

        for (int i = 0; i < SPACE_LINE + LENGTH_ERROR; i++) {
            System.out.print("_");
        }
        System.out.println("\n");
    }
    /**
     * 普通颜色输出
     */
    public static void output(ConsoleTextStyle consoleTextStyle, String str) {
        System.out.println(consoleTextStyle.getConsoleTextStyle() + str + ConsoleTextStyle.getReset());
    }

    /**
     * 中心特殊颜色输出
     *
     * @param consoleStyle 颜色
     * @param str          输出内容
     * @param strTop       顶部输出
     * @param strBottom    底部输出
     */
    public static void outputCenter(ConsoleStyle topColor , ConsoleStyle bottomColor, ConsoleStyle consoleStyle, String strTop, String str, String strBottom) {
        System.out.print(topColor.getCode().getConsoleTextStyle() + strTop + ConsoleTextStyle.getReset());
        System.out.print(consoleStyle.getCode().getConsoleTextStyle() + str + ConsoleTextStyle.getReset());
        System.out.println(bottomColor.getCode().getConsoleTextStyle() + strBottom + ConsoleTextStyle.getReset());
    }

    /**
     * 特殊颜色输出
     *
     * @param TopAmdBottomColor 顶部底部颜色
     * @param consoleStyle      内容颜色
     * @param strTop            顶部输出
     * @param str               输出内容
     * @param strBottom         底部输出
     */
    public static void outputCenter(ConsoleStyle TopAmdBottomColor, ConsoleStyle consoleStyle, String strTop, String str, String strBottom) {
        outputCenter(TopAmdBottomColor,TopAmdBottomColor,consoleStyle,strTop,str,strBottom);
    }
    public static void outputCenterLine(ConsoleStyle TopAmdBottomColor, ConsoleStyle consoleStyle, String strTop, String str, String strBottom) {
        outputCenter(TopAmdBottomColor,TopAmdBottomColor,consoleStyle,strTop,str,strBottom);
        System.out.println();
    }
    /**
     * 特殊颜色输出
     *
     * @param consoleStyle 颜色
     * @param str          输出内容
     * @param strTop       顶部输出
     * @param strBottom    底部输出
     */
    public static void outputCenter(ConsoleStyle consoleStyle, String strTop, String str, String strBottom) {
        outputCenter(ConsoleStyle.RESET,consoleStyle,strTop,str,strBottom);
    }


    /**
     * 使用 已经定义的普通颜色输出
     */
    public static void output(ConsoleStyle consoleStyle, String str) {
        output(consoleStyle.getCode(), str);
    }


    /**
     * 普通颜色输出 并换行
     */
    public static void outputLine(ConsoleStyle consoleStyle, String str) {
        output(consoleStyle.getCode(), str);
        System.out.println();
    }

}
